using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;
using EntGuayasSLA.BL.Listas.Criterias;

namespace EntGuayasSLA.BL.Listas
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    /// Autor: Luis Cuenca
    /// Fecha: 6/4/2013 5:46:44 PM
    /// </summary>
    [Serializable]
    public class FaseLicenciamientoLista : ReadOnlyListBase<FaseLicenciamientoLista, FaseLicenciamientoInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(FaseLicenciamientoLista), "Role");
        }

        #endregion

        #region Factory Methods
        /// <summary>
        /// Obtiene un listado de fases de licenciamiento
        /// </summary>
        /// <returns></returns>
        public static FaseLicenciamientoLista GetFaseLicenciamientoLista()
        {
            return DataPortal.Fetch<FaseLicenciamientoLista>();
        }
        public static FaseLicenciamientoLista GetFaseLicenciamientoLista(string idExpedienteLicenciamiento)
        {
            return DataPortal.Fetch<FaseLicenciamientoLista>(idExpedienteLicenciamiento);
        }
        public static FaseLicenciamientoLista GetFaseLicenciamientoLista(Guid idExpediente)
        {

            return DataPortal.Fetch<FaseLicenciamientoLista>(idExpediente);
        }
        private FaseLicenciamientoLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access
        /// <summary>
        /// Busqueda por Expediente licenciamiento
        /// </summary>
        /// <param name="criteria"></param>
        private void DataPortal_Fetch(string criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_eli_id",  criteria)
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_FASES_LICENCIAMIENTO\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(FaseLicenciamientoInfo.GetFaseLicenciamientoInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
        /// <summary>
        /// Busqueda por Expediente Id
        /// </summary>
        /// <param name="criteria"></param>
        private void DataPortal_Fetch(Guid idExpediente)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_exp_id", idExpediente.ToString())
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_FASES_EXPEDIENTE\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(FaseLicenciamientoInfo.GetFaseLicenciamientoInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
        /// <summary>
        /// Lista de fases
        /// </summary>
        private void DataPortal_Fetch()
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_tipo","LICENCIAMIENTO")
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_FASES\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(FaseLicenciamientoInfo.GetFaseLicenciamientoInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Autor: Luis Cuenca
    /// Fecha: 6/4/2013 5:46:44 PM
    /// </summary>
    [Serializable]
    public class FaseLicenciamientoInfo : ReadOnlyBase<FaseLicenciamientoInfo>
    {
        #region Business Methods

        public Guid Id { get; internal set; }
        public Guid ExpedienteLicenciamientoId { get; internal set; }
        public Guid FaseId { get; internal set; }
        public string CodigoFase { get; internal set; }
        public string EstadoFase { get; internal set; }
        public DateTime FechaInicio { get; internal set; }
        public DateTime FechaFin { get; internal set; }
        public int Orden { get; internal set; }
        public string UrlFase { get; internal set; }
        public string NombreFase { get; internal set; }
        #endregion

        #region Factory Methods

        internal static FaseLicenciamientoInfo GetFaseLicenciamientoInfo(DataRow childData)
        {
            return DataPortal.FetchChild<FaseLicenciamientoInfo>(childData);
        }

        private FaseLicenciamientoInfo()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void Child_Fetch(DataRow childData)
        {
            //Datos de tabla fase licenciamiento
            if (childData.Table.Columns.Contains("fal_id"))
                Id = Guid.Parse(childData["fal_id"].ToString());
            if (childData.Table.Columns.Contains("eli_id"))
                ExpedienteLicenciamientoId = Guid.Parse(childData["eli_id"].ToString());
            if (childData.Table.Columns.Contains("fal_fecha_inicio"))
                FechaInicio = DateTime.Parse(childData["fal_fecha_inicio"].ToString());
            if (childData.Table.Columns.Contains("fal_fecha_fin"))
                FechaFin = DateTime.Parse(childData["fal_fecha_fin"].ToString());
            if (childData.Table.Columns.Contains("fal_estado_fase"))
                EstadoFase = childData["fal_estado_fase"].ToString();//Estado de fase de licenciamiento
            
            //Datos de fases
            FaseId = Guid.Parse(childData["fas_id"].ToString());
           
            Orden = int.Parse(childData["fas_orden"].ToString());
            UrlFase    = childData["fas_url"].ToString();
            CodigoFase = childData["fas_codigo"].ToString();//
            NombreFase = childData["fas_nombre"].ToString();
        }

        #endregion
    }
}
